/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.inf.ufg.clinica.persistencia;

import br.inf.ufg.clinica.model.Agenda;
import br.inf.ufg.clinica.model.Empresa;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Gustavo
 */
public class EmpresaGravacao implements ServiceHelper<Empresa> {

    private final String ARQUIVO = "empresa.csv";
    private CSVToFile gerenciadorDeArquivo;

    public EmpresaGravacao() {
        gerenciadorDeArquivo = new CSVToFile(ARQUIVO);
    }

    @Override
    public boolean gravarObjeto(Empresa empresa) {
        if (!gerenciadorDeArquivo.contem(empresa.getId())) {
            return gerenciadorDeArquivo.gravarLinha(toLine(empresa));
        } else {
            return false;
        }
    }

    @Override
    public void gravarObjetos(List<Empresa> empresa) {
        for (Empresa emp : empresa) {
            this.gravarObjeto(emp);
        }
    }

    @Override
    public Empresa getObjetoPorId(int id) {
        String linha = gerenciadorDeArquivo.getLinhaPorId(id);
        if (linha != null) {
            Empresa resultado = getObject(linha);
            return resultado;
        } else {
            return null;
        }

    }

    @Override
    public ArrayList<Empresa> getTodosObjetos() {
        List<String> listaObjetos = gerenciadorDeArquivo.getLinhas();
        ArrayList<Empresa> resultado = new ArrayList<>();
        for (String entrada : listaObjetos) {
            Empresa empresa = getObject(entrada);
            resultado.add(empresa);
        }
        return resultado;
    }
    
    @Override
    public boolean remove(Empresa empresa) {
        return gerenciadorDeArquivo.removerLinha(empresa.getId());
    }
    
    private String toLine(Empresa i) {
        StringBuilder sb = new StringBuilder();

        sb.append(i.getId());
        sb.append(ServiceHelper.SEPARADOR);
        sb.append(i.getCnpj());
        sb.append(ServiceHelper.SEPARADOR);
        sb.append(i.getNome());
        sb.append(ServiceHelper.SEPARADOR);
        sb.append(i.getEndereco());
        sb.append(ServiceHelper.SEPARADOR);
        sb.append(i.getTelefone());
        sb.append(ServiceHelper.SEPARADOR);
        sb.append(i.getPessoa_contato());
        sb.append(ServiceHelper.SEPARADOR);
        sb.append(i.getObservacao());
        sb.append(ServiceHelper.SEPARADOR);
        sb.append(i.isAtivo());
        sb.append(ServiceHelper.SEPARADOR);
        sb.append(i.getData_ativacao());

        return sb.toString();
    }

    private Empresa getObject(String line) {
        String[] empresa = line.split(
                String.valueOf(ServiceHelper.SEPARADOR));

        String observacao = empresa[0];
        int id = Integer.parseInt(empresa[0]);
        String nome = empresa[1];
        String cpf = empresa[2];
        String endereco = empresa[3];
        String telefone = empresa[5];

        Empresa resultado = new Empresa(cpf, nome, id, endereco, telefone, null, observacao, true, null);
        return resultado;
    }
    
    
    public void imprimeListaEmpresa(ArrayList<Empresa> empresa) {

        System.out.println("LISTA DE EMPRESAS: \n");
        for (Empresa empresa1 : empresa) {
            
            System.out.println("ID: " + empresa1.getId() + "\t Nome da Empresa: " + 
            empresa1.getNome() + "\n");
        }
        System.out.println("**************************************************\n");

    }
}
